NAXSI – Nginx Anti XSS & SQL Injection – זהו פיירוול אפליקטיבי, אחיו של mod_security לשרתי Nginx, שיעזור לכם להגן על האתר שלכם מפני XSS, SQL Injections, CSRF, Local & Remote File Inclusion. עובד מהר וקל בהגדרות. עדיין ב-Apache בגלל mod_security?
NAXSI
ברור שהדרך הכי יעילה להתגונן מפני הבעיות האלה היא לכתוב קוד טוב, אבל במקרים מסוימים כלי מסוג Web Applications Firewall כמו NAXSI ו-mod_security יכול מאוד להועיל:
* לאיכות קוד נמוכה כשאין אפשרות לזרוק הכל ולכתוב מחדש
* לקוד סגור שאין אפשרות לתקן בו בעיות
* לסקריפט לא ברור שאיזה מישהו כתב ושאתם צריכים עכשיו להפעיל אצלכם בשרת
איך NAXSI עובד
NAXSI יודע לסנן בקשות GET, כותרי http headers כמו קוקיז ואת גוף בקשות ה-POST לפי כללים מסוימים.אוסף הפילטרים הבסיסיים מסנן תווים מזיקים ומילים שמורות ב-SQL. התנאים האלה די נוקשים ויכולים להפריע לעבודת אתר תקינה כמו phpguide, שבו כותבים רק תווים מזיקים ושאילתות. בשביל זה ב-NAXSI יש "רשימות לבנות" שמבטלות את הכללים שאתם לא צריכים.
כשבקשה מגיעה לשרת – היא עוברת דרך אוסף הבדיקות השונות ומקבלת "נקודות רעות" בשש קטגוריות שונות: $SQL, $XSS, $RFI, $TRAVERSAL, $EVADE, $UPLOAD.
אם כמות הנקודות עוברת את רמת החסימה – הבקשה נחשבת למסוכנת, והמשתמש נשלח לעמוד DeniedUrl שנקבע מראש בהגדרות. בעמוד הזה אפשר לאסוף סטטיסטיקה על איך מנסים לפגוע בכם וכמה.
NAXSI יודע לעבוד בשני מצבים – למידה ורמת פעילות א'. במקרה הראשון NAXSI ייצר בעצמו רשימות לבנות לפי פעילותם של המשתמשים, כך שאם במקום מסוים רוב המשתמשים נחסמים עבור קלט תקין – NAXSI תיצור בשבילו כלל לבן. בסוף הלימוד כדאי לעבור על הרשימות האלה ולערוך במידת הצורך.
לאחר מכן יש להעביר את NAXSI למצב פעילות, שבו בקשות מזיקות ייחסמו.
התקנת NAXSI
בדביאנים אפשר להתקין כבר מהרפוזיטורים:
sudo apt-get install nginx-naxsi
להפצות האחרות מקמפלים לבד מ-naxsi.googlecode.com.
הגדרות
בהגדרות הכלליות של Nginx נוסיף את החוקים של NAXSI:
include /etc/nginx/naxsi_core.rules;
ובעבור כל virtual host נוסיף את ההגדרות הרצויות:
LearningMode;
SecRulesEnabled;
DeniedUrl "/RequestDenied";
#include "/etc/nginx/mynaxsi.rules";
## check rules
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
SecRulesEnabled;
DeniedUrl "/RequestDenied";
#include "/etc/nginx/mynaxsi.rules";
## check rules
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
די ברור מהשם של כל סעיף מה הוא עושה.
* SecRulesEnabled מפעילה את NAXSI עבור המיקום הנוכחי. אם באיזושהי תת-תיקייה תרצו לכבות אותו – עבור אותו מיקום נשים SecRulesDisabled.
* /etc/nginx/mynaxsi.rules
שם נמצאת רשימת הכללים שנוצרו בשלב הלימוד. עד שלא נסיים ליצור אותם – השורה נשארת בהערה.
מידע נוסף על NAXSI אפשר למצוא בוויקי שלהם.
זהו צעד חשוב עבור כל מי שהוחזק על ידי mod_security ועדיין לא עבר ל-Nginx.
בנוגע ל-Nginx עצמו – אפשר לקרוא את המדריך של מיכאל ארנזון להגדרת Nginx.
תגובות לכתבה:
מגניב,
יש משהו דומה ל apache?
כמובן חשוב לציין, אף פעם אל תסתמכו על אבטחה מהסוג הזה באפליקציות שלכם,
אי אפשר לדעת על איזה שרת זה יהיה בעתיד, ואם השירות נופל גם בעיה,
וכו',
זה אחלה כלי "למקרה ו.."
בנוסף, אני מקווה שהגרמנים יינצחו היורו הזה!
mod_security
זה לא apt-get install nginx-naxsi
זה sudo apt-get install nginx-naxsi
ללא sudo זה יראה שגיאה צריך לתת הרשאה
אני יוצא מתוך נקודת הנחה שלמי שיש ubuntu יודע איך להתקין בה דברים :)
תודה בכל אופן, עדכנתי.
נשמע טוב, בפועל הכלי הזה יכול ליצור המון בעיות כתוצאה מסינון מילים בסיסיות כדוגמת SELECT, DELETE.
תודה על השיתוף :)
לא מספיק לכתוב רק select ו delete.
על כל מילה בעיתית אתה מקבל נקודה. אם אתה עובר שמונה נקודות בקטגורית ה sql רק אז אתה נחסם.
CheckRule "$SQL >= 8" BLOCK;